<?php
require_once 'JSON.php';
require_once dirname(dirname(dirname(__DIR__))).'/application/libraries/AliOSS/Alioss.php';
$Alioss = new Alioss();
header('Content-type: text/html; charset=UTF-8');

if (count($_FILES) <= 0) {
    alert(false, '亲，您上传的图片不存在，请稍后重试~');
}
foreach ($_FILES as $file) {
    if ($file['error'] != 0) {
        alert(false, $this->error($file['error']));
    }
    $file_name = addslashes(trim($file['name']));
    $file_path = $file['tmp_name'];
    $file_size = $file['size'];

    if (!is_uploaded_file($file_path) && !file_exists($file_path)) {
        alert(false, '啊哦，上传出错了，请稍后重试');
    }
    $hash = md5_file($file_path); // 获取文件Hash值
    if (empty($hash)) {
        alert(false, '图片校验失败，请换张图试试');
    }
    list($code, $msg) = check_file_for_image($file_path);// 校验文件是否为图片
    if ($code != 1) {
        alert(false, '您的图片格式不正确，请重新选择！');
    }
    $res = $Alioss->upload_file($file_path, $hash, true); // 阿里云OSS上传文件
    if (isset($res['status']) && $res['status']) {
        $result = [
            'file_name'     => $file_name,      // 源文件名称
            'file_size'     => $file_size,      // 文件大小
            'file_hash'     => $hash,           // 文件Hash（MD5）
            'save_path'     => $res['msg']['save_path'], //数据库保存路径
            'file_url'      => $res['msg']['url'] // 文件URL地址
        ];
        $json = new Services_JSON();
        echo $json->encode(array('error' => 0, 'url' => $result['file_url']));
        exit;
    } else {
        alert($res);
    }
    break; // 单文件上传，只循环一次
}

/**
 * 校验文件是否为图片类型
 * @param string $file_path 文件路径
 * @return array
 */
function check_file_for_image($file_path)
{
    $image_mime = array(
        'image/bmp',
        'image/jpeg',
        'image/png',
        'image/gif'
    );

    $fp = finfo_open(FILEINFO_MIME_TYPE);
    if ($fp) {
        $file_mime = finfo_file($fp, $file_path);
        finfo_close($fp);
        if (in_array($file_mime, $image_mime)) {
            return [1, $file_mime];
        } else{
            return [2, '文件格式有误'];
        }
    }
    return [-1, '文件不存在'];
}

function alert($msg)
{
    header('Content-type: text/html; charset=UTF-8');
    $json = new Services_JSON();
    echo $json->encode(array('error' => 1, 'message' => $msg));
    exit;
}
